import Vue from "vue";

import Vuex from "vuex";
import setting from "./modules/setting";
import user from "./modules/user";

import {ADDCOUNT,SUBCOUNT} from './mutation-types'


//使用vuex
Vue.use(Vuex);

//第一步创建vuex的实例

const store = new Vuex.Store({
  state: {
    msg: "vuex的 基本值",
    count: 100,
    arr: [1, 2, 3, 4, 5],
  }, //  表示存放数据的 类似于 data
  mutations: {
    mSetToken(state) {
      state.msg=' 我是全局的设置token'
    },


    [ADDCOUNT](state, payload = 1) {
      console.log(payload);
      state.count += payload;
    },

    //增加
    //  addCount(state) {
    //      state.count++
    //  },
    // addCount(state, payload = 1) {
    //   console.log(payload);
    //   state.count += payload;
    // },
    subCount(state,payload=1) {
      state.count -= payload;
    }
  },
  actions: {
    //异步处理 我们state 的count
    // context 表示上下文对象
    asyncAddCount(context) {
      //   console.log(context);
      setTimeout(() => {
        //    context.commit('mutations里面的方法名字')
        // 方式一 不传递参数
        // context.commit('addCount')
        //方式二   传参参数
        // context.commit("addCount", 1000);
        context.commit(ADDCOUNT, 1000);
      }, 2000);
    },
    asyncSubCount({commit}) {
      setTimeout(() => {
        //    context.commit('mutations里面的方法名字')
        // 方式一 不传递参数
        // context.commit('addCount')
        //方式二   传参参数
       commit("subCount", 100);
      }, 2000);

    }



  },

  //  getters 相当于我们的computed 的功能
  // getters 里面定义方法当属性使用  必须要return
  getters: {
    // sumArr(state) {
    //     let sum=0;
    //     state.arr.forEach(item=>{
    //         sum+=item
    //     })

    //     console.log(state);
    //     sum+=state.count

    //     return sum

    // },

    // sumArr(state) {
    //    return state.arr.reduce((cur,currentVal,index)=> cur+currentVal,state.count)

    // },

    sumArr: (state) =>
      state.arr.reduce(
        (cur, currentVal, index) => cur + currentVal,
        state.count
      ),

    filterArr({ arr }) {
      return arr.filter((item) => item % 2 == 0).toString();
    },
    token(state) {
      return state.user.token

    },
    setting(state) {
      return state.setting.name
    }

  },

// es5 
  // modules:{
  //   setting:setting,
  //   user:user
  // },

  // es6 
  modules:{
    setting,
    user
  }
});

// 第二步 导出 实例对象

export default store;
